<?php

class Agi_Exception extends Exception
{
    /**
     * @var  array  PHP error code => human readable name
     */
    public static $php_errors = array(
        E_ERROR => 'Fatal Error',
        E_USER_ERROR => 'User Error',
        E_PARSE => 'Parse Error',
        E_WARNING => 'Warning',
        E_USER_WARNING => 'User Warning',
        E_STRICT => 'Strict',
        E_NOTICE => 'Notice',
        E_RECOVERABLE_ERROR => 'Recoverable Error',
    );

    /**
     * @var  string  error rendering view
     */
    public static $error_view = 'agi/error';

    /**
     * @var  string  error view content type
     */
    public static $error_view_content_type = 'text/html';

    /**
     * Creates a new translated exception.
     *
     *     throw new Agi_Exception('Something went terrible wrong, :user',
     *         array(':user' => $user));
     *
     * @param   string          error message
     * @param   array           translation variables
     * @param   integer|string  the exception code
     * @return  void
     */
    public function __construct($message, array $variables = NULL, $code = 0)
    {
        if (defined('E_DEPRECATED'))
        {
            // E_DEPRECATED only exists in PHP >= 5.3.0
            Agi_Exception::$php_errors[E_DEPRECATED] = 'Deprecated';
        }

        // Set the message
        //$message = __($message, $variables);
        

        // Pass the message and integer code to the parent
        parent::__construct($message, (int)$code);

        // Save the unmodified code
        // @link http://bugs.php.net/39615
        $this -> code = $code;
    }

    /**
     * Magic object-to-string method.
     *
     *     echo $exception;
     *
     * @uses    Agi_Exception::text
     * @return  string
     */
    public function __toString()
    {
        return Agi_Exception::text($this);
    }

    /**
     * Get a single line of text representing the exception:
     *
     * Error [ Code ]: Message ~ File [ Line ]
     *
     * @param   object  Exception
     * @return  string
     */
    public static function text(Exception $e)
    {
        return sprintf('%s [ %s ]: %s ~ %s [ %d ]', get_class($e), $e -> getCode(), strip_tags($e -> getMessage()), Debug::path($e -> getFile()), $e -> getLine());
    }

}
